package server;

import java.util.ArrayList;
import java.util.Collection;

import server.Carnivoro;
import server.Casella;
import server.Dinosauro;
import server.Erbivoro;
import server.Giocatore;
import server.Mappa;
import server.Posizione;
import server.Terra;
import server.TuplaClassifica;
import server.VistaLocale;
import server.ComandiException;


public class Partita {

	/**
	 * @uml.property  name="classifica"
	 * @uml.associationEnd  multiplicity="(1 1)" inverse="partita:server.Classifica"
	 */
	private Classifica classifica = new server.Classifica();

	/**
	 * Getter of the property <tt>classifica</tt>
	 * @return  Returns the classifica.
	 * @uml.property  name="classifica"
	 */
	public Classifica getClassifica() {
		return classifica;
	}

	/**
	 * Setter of the property <tt>classifica</tt>
	 * @param classifica  The classifica to set.
	 * @uml.property  name="classifica"
	 */
	public void setClassifica(Classifica classifica) {
		this.classifica = classifica;
	}

	/**
	 * @uml.property  name="mappa"
	 * @uml.associationEnd  multiplicity="(1 1)" inverse="partita:server.Mappa"
	 */
	private Mappa mappa = new server.Mappa();

	/**
	 * Getter of the property <tt>mappa</tt>
	 * @return  Returns the mappa.
	 * @uml.property  name="mappa"
	 */
	public Mappa getMappa() {
		return mappa;
	}

	/**
	 * Setter of the property <tt>mappa</tt>
	 * @param mappa  The mappa to set.
	 * @uml.property  name="mappa"
	 */
	public void setMappa(Mappa mappa) {
		this.mappa = mappa;
	}

	/**
	 * @uml.property  name="giocatoriInPatrita"
	 * @uml.associationEnd  multiplicity="(0 8)" inverse="partita:server.Giocatore"
	 */
	private ArrayList<Giocatore> giocatoriInPartita;
	

	/**
	 * Getter of the property <tt>giocatoriInPartita</tt>
	 * @return  Returns the giocatoriInPartita.
	 * @uml.property  name="giocatoriInPartita"
	 */
	public ArrayList<Giocatore> getGiocatoriInPartita() {
		return giocatoriInPartita;
	}

	/**
	 * Setter of the property <tt>giocatoriInPatrita</tt>
	 * @param giocatoriInPatrita  The giocatoriInPatrita to set.
	 * @uml.property  name="giocatoriInPatrita"
	 */
	public void setGiocatoriInPatrita(ArrayList<Giocatore> giocatoriInPartita) {
		this.giocatoriInPartita = giocatoriInPartita;
	}

	/** 
	 * @uml.property name="giocatoriNonInPartita"
	 * @uml.associationEnd multiplicity="(0 -1)" inverse="partita1:server.Giocatore"
	 */
	private ArrayList<Giocatore> giocatore;
	private ArrayList<Giocatore> giocatoriNonInPartita;
	
	/**
	 * Getter of the property <tt>giocatoriNonInPartita</tt>
	 * @return  Returns the giocatore.
	 * @uml.property  name="giocatoriNonInPartita"
	 */
	public ArrayList<Giocatore> getGiocatoriNonInPartita() {
		return giocatore;
	}

	/**
	 * Setter of the property <tt>giocatoriNonInPartita</tt>
	 * @param giocatoriNonInPartita  The giocatore to set.
	 * @uml.property  name="giocatoriNonInPartita"
	 */
	public void setGiocatoriNonInPartita(ArrayList<Giocatore> giocatoriNonInPartita) {
		giocatore = giocatoriNonInPartita;
	}

	public static final int NUMERO_MAX_GIOCATORI_IN_PARTITA =8;
	public static final int NUMERO_MAX_DINOSAURI =20;
	public static int ultimoTokenUsato;
	
	public String creaUtente(String user,String pass) throws ComandiException{
		int a=2;
		if(a==0){
			String s="";
			return s;
		}
		throw new ComandiException(ComandiException.TOKEN_NON_VALIDO);
	}
	
	public String login(String user, String pass) throws ComandiException{
		int a=2;
		if(a==0){
			String s="";
			return s;
		}
		throw new ComandiException(ComandiException.TOKEN_NON_VALIDO);
	}
	
	public String creaRazza(String token, String nomeRazza, char tipo)  throws ComandiException{
		int a=2;
		if(a==0){
			String s="";
			return s;
		}
		throw new ComandiException(ComandiException.TOKEN_NON_VALIDO);
	}
		
	public String accessoPartita(String token) throws ComandiException{
		int a=2;
		if(a==0){
			String s="";
			return s;
		}
		throw new ComandiException(ComandiException.TOKEN_NON_VALIDO);
	}
	
	public String uscitaPartita(String token) throws ComandiException{
		int a=2;
		if(a==0){
			String s="";
			return s;
		}
		throw new ComandiException(ComandiException.TOKEN_NON_VALIDO);
	}
	
	public String[] listaGiocatori(String token) throws ComandiException{
		int a=2;
		if(a==0){
			String[] s={"a","b"};
			return s;
		}
		throw new ComandiException(ComandiException.TOKEN_NON_VALIDO);
	}
	
	public String[] classifica(String token) throws ComandiException{
		int a=2;
		if(a==0){
			String[] s={"a","b"};
			return s;
		}
		throw new ComandiException(ComandiException.TOKEN_NON_VALIDO);
	}
	
	public String logout(String token) throws ComandiException{
		int a=2;
		if(a==0){
			String s="";
			return s;
		}
		throw new ComandiException(ComandiException.TOKEN_NON_VALIDO);
	}
	
	//-----------------------------------------------------------------------------
	//------------- COMANDI IN PARTITA (INFORMAZIONI) ----------------------------- 
	//-----------------------------------------------------------------------------
	
	public String[] mappaGenerale(String token) throws ComandiException{
		int a=2;
		if(a==0){
			String[] s={"a","b"};
			return s;
		}
		throw new ComandiException(ComandiException.TOKEN_NON_VALIDO);
	}
	
	public String[] listaDinosauri(String token) throws ComandiException{
		int a=2;
		if(a==0){
			String[] s={"a","b"};
			return s;
		}
		throw new ComandiException(ComandiException.TOKEN_NON_VALIDO);
	}
	
	public String[] vistaLocale(String token,String idDino) throws ComandiException{
		int a=2;
		if(a==0){
			String[] s={"a","b"};
			return s;
		}
		throw new ComandiException(ComandiException.TOKEN_NON_VALIDO);
	}
	
	public String statoDinosauro(String token,String idDino) throws ComandiException{
		int a=2;
		if(a==0){
			String s="";
			return s;
		}
		throw new ComandiException(ComandiException.TOKEN_NON_VALIDO);
	}
	
	//-----------------------------------------------------------------------------
	//------------- COMANDI IN PARTITA (AZIONI) ----------------------------------- 
	//-----------------------------------------------------------------------------
	
	public String movimento(String token,String idDino,Posizione dest) throws ComandiException{
		int a=2;
		if(a==0){
			String s="";
			return s;
		}
		throw new ComandiException(ComandiException.TOKEN_NON_VALIDO);
	}
	
	public String crescita(String token,String idDino) throws ComandiException{
		int a=2;
		if(a==0){
			String s="";
			return s;
		}
		throw new ComandiException(ComandiException.TOKEN_NON_VALIDO);
	}
	
	public String deposizioneUovo(String token,String idDino) throws ComandiException{
		int a=2;
		if(a==0){
			String s="";
			return s;
		}
		throw new ComandiException(ComandiException.TOKEN_NON_VALIDO);
	}
	
	//-----------------------------------------------------------------------------
	//------------- COMANDI IN PARTITA (TURNI) ------------------------------------ 
	//-----------------------------------------------------------------------------
	
	
	//-----------------------------------------------------------------------------
	//------------- METODI DELLA CLASSE ------------------------------------------- 
	//-----------------------------------------------------------------------------
	
	public Giocatore cercaGiocatore(String token,ArrayList<Giocatore> array){
	
		return null;
	}
	
	public Dinosauro cercaDinosauro(String idDino,ArrayList<Giocatore> array){
		
		return null;
	}
	
	public Dinosauro cercaDinosauroMio(String idDino,ArrayList<Dinosauro> array){
			
		return null;
	}
	
	public Posizione posizioneCasualePrimoDino(){
		Posizione posizione= new Posizione();
	
		return posizione;
	}
	
	public Posizione posizioneCasualeDeposizioneUovo(VistaLocale vista){
		Posizione posizione= new Posizione();
		
		return posizione;
	}
	
	public int contaDinosauriSullaMappa(){
		int n=0;
		return n;
	}

	/**
	 * @uml.property  name="gestioneTurno"
	 * @uml.associationEnd  multiplicity="(1 1)" inverse="partita:server.GestioneTurno"
	 */
	private GestioneTurno gestioneTurno = new server.GestioneTurno();

	/**
	 * Getter of the property <tt>gestioneTurno</tt>
	 * @return  Returns the gestioneTurno.
	 * @uml.property  name="gestioneTurno"
	 */
	public GestioneTurno getGestioneTurno() {
		return gestioneTurno;
	}

	/**
	 * Setter of the property <tt>gestioneTurno</tt>
	 * @param gestioneTurno  The gestioneTurno to set.
	 * @uml.property  name="gestioneTurno"
	 */
	public void setGestioneTurno(GestioneTurno gestioneTurno) {
		this.gestioneTurno = gestioneTurno;
	}
	
}
